﻿using System;

namespace Application.Core.IoC
{
    public interface IIoCContainer
    {
        void Add<TPluginType, TConcreteType>(Lifecycle lifecycle) where TConcreteType : TPluginType;

        void Add(Type pluginType, Type concreteType, Lifecycle lifecycle);

        void Add(Type pluginType, object instance, Lifecycle lifecycle);

        void Config();

        object GetInstance(Type type);

        T GetInstance<T>();

        T[] GetAllInstance<T>();
    }
}